import { createRouter, createWebHistory } from 'vue-router'
import { useUserStore } from '@/store/user'
import diskRoutes from './disk'
import homeRoutes from './home'
import customerRoutes from './customer'
import crmRoutes from './crm'
import lawcaseRoutes from './lawcase'
import contractRoutes from './contract'
import lawyerRoutes from './lawyer'
import userRoutes from './user'
import baseRoutes from './base'
import workorderRoutes from './workorder'
import BasicLayout from '@/layouts/BasicLayout.vue'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/login',
      name: 'Login',
      component: () => import('@/views/home/Login.vue'),
      meta: {
        title: '登录',
        requiresAuth: false,
      },
    },
    {
      path: '/403',
      name: 'Forbidden',
      component: () => import('@/views/error/403.vue'),
      meta: {
        title: '无权限访问',
        requiresAuth: false,
      },
    },
    // 主布局路由，包含所有需要认证的页面
    {
      path: '/',
      component: BasicLayout,
      meta: {
        requiresAuth: true,
      },
      children: [
        {
          path: '',
          name: 'Home',
          component: () => import('@/views/home/Home.vue'),
          meta: {
            title: '首页',
          },
        },
        {
          path: '/home',
          name: 'Workbench',
          component: () => import('@/views/home/Home.vue'),
          meta: {
            title: '工作台',
          },
        },
        {
          path: '/disk',
          name: 'Disk',
          component: () => import('@/views/disk/Disk.vue'),
          meta: {
            title: '文件管理',
          },
        },
        // 文件管理路由
        ...diskRoutes,
        // 首页相关路由
        ...homeRoutes,
        // 客户管理路由
        ...customerRoutes,
        // CRM模块路由
        ...crmRoutes,
        // 案件模块路由
        ...lawcaseRoutes,
        // 合同模块路由
        ...contractRoutes,
        // 律所管理路由
        ...lawyerRoutes,
        // 人事管理路由
        ...userRoutes,
        // 基础数据路由
        ...baseRoutes,
        // 工单模块路由
        ...workorderRoutes,
      ],
    },
    {
      path: '/404',
      name: 'NotFound',
      component: () => import('@/views/error/404.vue'),
      meta: {
        title: '页面不存在',
        requiresAuth: false,
      },
    },
    // 捕获所有未匹配的路由，重定向到404

    {
      path: '/:pathMatch(.*)*',
      redirect: '/404',
    },
  ],
})

// 路由守卫 - 优化后的版本
router.beforeEach(async (to, from, next) => {
  const userStore = useUserStore()

  // 设置页面标题
  if (to.meta.title) {
    document.title = `${to.meta.title} - OA系统`
  }

  // 检查是否是明确标记为不需要认证的页面
  if (to.meta.requiresAuth === false) {
    next()
    return
  }

  // 检查是否需要登录（默认需要认证，除非明确设置为false）
  if (!userStore.token) {
    // 如果已经是登录页面，直接放行，避免循环重定向
    if (to.path === '/login') {
      next()
      return
    }
    next('/login')
    return
  }

  // ✅ 新增：优先验证token有效性，避免无效token发送请求
  // 如果token存在但可能已失效，使用getUserInfo验证
  try {
    const res = await userStore.getUserInfo()
    // 使用类型断言解决类型检查错误
    if ((res as any)?.code !== 0) {
      // Token无效，清除本地状态并跳转到登录页
      userStore.logoutAction()
      next('/login')
      return
    }
  } catch (error: any) {
    // 验证token时出现错误（网络问题等）
    console.error('Token验证失败:', error)
    // 如果返回401错误，说明token无效
    if (error.response?.status === 401 || error?.response?.data?.code === 401) {
      userStore.logoutAction()
      next('/login')
      return
    }
    // 其他错误可能是网络问题，继续执行
  }

  // 如果已登录但用户信息为空，尝试从 localStorage 恢复
  if (userStore.token && (!userStore.userInfo || !userStore.userInfo.id)) {
    try {
      // 先尝试从 localStorage 恢复
      const cachedUserInfo = localStorage.getItem('userInfo')
      if (cachedUserInfo) {
        try {
          const userInfoObj = JSON.parse(cachedUserInfo)
          if (userInfoObj && userInfoObj.id > 0) {
            userStore.userInfo = userInfoObj
            // 恢复后继续导航
            next()
            return
          }
        } catch (e) {
          localStorage.removeItem('userInfo')
        }
      }

      // 如果 localStorage 没有，再尝试从后端获取
      await userStore.getUserInfo()
      next()
      return
    } catch (error) {
      console.error('加载用户信息失败:', error)
      // 如果加载失败，跳转到登录页
      if (to.path !== '/login') {
        next('/login')
        return
      }
    }
  }

  // 检查权限 - 暂时禁用权限验证，便于开发测试
  // if (to.meta.permissions) {
  //   const hasPermission = userStore.permissions?.some((permission: string) =>
  //     (to.meta.permissions as string[]).includes(permission)
  //   )
  //
  //   if (!hasPermission) {
  //     next('/403')
  //     return
  //   }
  // }

  next()
})

export default router
